

#Область ПрограммныйИнтерфейс


#Область ВыполнениеАлгоритма

// Новый параметры выполнения алгоритма.
// 
// Возвращаемое значение:
//  Структура - Новый параметры выполнения алгоритма:
// * Текст - Строка - 
// * ВходящиеПеременные - Структура - 
// * ИсполнениеНаКлиенте - Булево - 
// * Форма - Неопределено - 
// * ИдентификаторРедактора - Неопределено - 
// * ВозвращатьЗначенияПеременных - Булево
// * ИсходящиеПеременные - Массив из Строка -
Функция НовыйПараметрыВыполненияАлгоритма() Экспорт
	ПараметрыВыполнения = Новый Структура;
	ПараметрыВыполнения.Вставить("Текст", "");
	ПараметрыВыполнения.Вставить("ВходящиеПеременные", Новый Структура);
	ПараметрыВыполнения.Вставить("ИсполнениеНаКлиенте", Ложь);
	ПараметрыВыполнения.Вставить("Форма", Неопределено);
	ПараметрыВыполнения.Вставить("ИдентификаторРедактора", Неопределено);
	ПараметрыВыполнения.Вставить("ВозвращатьЗначенияПеременных", Ложь);
	ПараметрыВыполнения.Вставить("ИсходящиеПеременные", Новый Массив);
	
	Возврат ПараметрыВыполнения;
КонецФункции

// Новый результат выполнения алгоритма.
// 
// Возвращаемое значение:
//  Структура - Новый результат выполнения алгоритма:
// * Успешно - Булево - 
// * ВремяВыполнения - Число - 
// * ОписаниеОшибки - Строка - 
// * ЗначенияПеременных - Структура - 
Функция НовыйРезультатВыполненияАлгоритма() Экспорт
	РезультатВыполнения = Новый Структура;
	РезультатВыполнения.Вставить("Успешно", Истина);
	РезультатВыполнения.Вставить("ВремяВыполнения", 0);
	РезультатВыполнения.Вставить("ОписаниеОшибки", "");
	РезультатВыполнения.Вставить("ЗначенияПеременных", Новый Структура);
	
	Возврат РезультатВыполнения;
КонецФункции

//@skip-check bsl-variable-name-invalid
// Результат выполнения алгоритма.
// 
// Параметры:
//  ___УИ___ПараметрыВыполненияАлгоритма____ - см. НовыйПараметрыВыполненияАлгоритма
// 
// Возвращаемое значение:
//  см. НовыйРезультатВыполненияАлгоритма
Функция РезультатВыполненияАлгоритма(___УИ___ПараметрыВыполненияАлгоритма____) Экспорт
	//@skip-check bsl-variable-name-invalid
	___УИ__РезультатВыполненияАлгоритма___ = НовыйРезультатВыполненияАлгоритма();
	//@skip-check bsl-variable-name-invalid
	___УИ__НачалоВыполнения___ = ТекущаяУниверсальнаяДатаВМиллисекундах();

	Если ЗначениеЗаполнено(___УИ___ПараметрыВыполненияАлгоритма____.Текст) Тогда
		ВыполнятьЧерезОбработку = Ложь;
		Если ___УИ___ПараметрыВыполненияАлгоритма____.Форма <> Неопределено
			 И ___УИ___ПараметрыВыполненияАлгоритма____.ИдентификаторРедактора <> Неопределено Тогда
			РедакторыФормы = РедакторыФормы(___УИ___ПараметрыВыполненияАлгоритма____.Форма);
			ДанныеРедактора = РедакторыФормы[___УИ___ПараметрыВыполненияАлгоритма____.ИдентификаторРедактора];
			ВыполнятьЧерезОбработку = ДанныеРедактора.ИспользоватьОбработкуДляВыполненияКода;
		КонецЕсли;

		Если ВыполнятьЧерезОбработку Тогда
			Попытка
				Если ___УИ___ПараметрыВыполненияАлгоритма____.ИсполнениеНаКлиенте Тогда
#Если НаКлиенте Тогда
					//@skip-check use-non-recommended-method
					ИсполнительОбработка = ПолучитьФорму("ВнешняяОбработка."
														 + ИмяПодключаемойОбработкиДляИсполненияКодаРедактора(___УИ___ПараметрыВыполненияАлгоритма____.ИдентификаторРедактора)
														 + ".Форма");
#КонецЕсли
				Иначе
#Если Не НаКлиенте Или ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда
					ИсполнительОбработка = ВнешниеОбработки.Создать(ИмяПодключаемойОбработкиДляИсполненияКодаРедактора(___УИ___ПараметрыВыполненияАлгоритма____.ИдентификаторРедактора));
#КонецЕсли
				КонецЕсли;
				
				ИсполнительОбработка.УИ_ИнициализироватьПеременные(___УИ___ПараметрыВыполненияАлгоритма____.ВходящиеПеременные);
				ЗначенияПеременныхИсполнения = ИсполнительОбработка.УИ_ВыполнитьАлгоритм();
				Если ТипЗнч(ЗначенияПеременныхИсполнения) = Тип("Структура") Тогда
					___УИ__РезультатВыполненияАлгоритма___.ЗначенияПеременных = ЗначенияПеременныхИсполнения;
				КонецЕсли;

			Исключение
				___УИ__РезультатВыполненияАлгоритма___.Успешно = Ложь;
				___УИ__РезультатВыполненияАлгоритма___.ОписаниеОшибки = ОписаниеОшибки();
				УИ_ОбщегоНазначенияКлиентСервер.СообщитьПользователю(___УИ__РезультатВыполненияАлгоритма___.ОписаниеОшибки);
			КонецПопытки;
		Иначе

			ВыполняемыйТекстАлгоритма = ДополненныйКонтекстомКодАлгоритма(___УИ___ПараметрыВыполненияАлгоритма____.Текст,
																		  ___УИ___ПараметрыВыполненияАлгоритма____.ВходящиеПеременные,
																		  ?(___УИ___ПараметрыВыполненияАлгоритма____.ВозвращатьЗначенияПеременных,
																			___УИ___ПараметрыВыполненияАлгоритма____.ИсходящиеПеременные,
																			Новый Массив));

			Попытка
#Если Не ВебКлиент Тогда
					//@skip-check server-execution-safe-mode
				Выполнить (ВыполняемыйТекстАлгоритма);
#КонецЕсли
			Исключение
				___УИ__РезультатВыполненияАлгоритма___.Успешно = Ложь;
				___УИ__РезультатВыполненияАлгоритма___.ОписаниеОшибки = ОписаниеОшибки();
				УИ_ОбщегоНазначенияКлиентСервер.СообщитьПользователю(___УИ__РезультатВыполненияАлгоритма___.ОписаниеОшибки);
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;

	ОкончаниеВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах();
	___УИ__РезультатВыполненияАлгоритма___.ВремяВыполнения = ОкончаниеВыполнения - ___УИ__НачалоВыполнения___;
	Возврат ___УИ__РезультатВыполненияАлгоритма___;
	
КонецФункции


#КонецОбласти

// Параметры формирования редакторов формы.
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
// 
// Возвращаемое значение:
//  см. НовыйПараметрыФормированияРедакторов
Функция ПараметрыФормированияРедакторовФормы(Форма) Экспорт
	Возврат Форма[ИмяРеквизитаРедактораКодаПараметрыФормированияРедакторов()];
КонецФункции

// Новый параметры формирования редакторов.
// 
// Возвращаемое значение:
//  Структура - Новый параметры формирования редакторов:
// * ПолеHTMLПостроеноНаWebkit - Булево - 
// * ЭтоWindowsКлиент - Булево - 
// * ЭтоВебКлиент - Булево - 
Функция НовыйПараметрыФормированияРедакторов() Экспорт
	Данные =Новый Структура;
	Данные.Вставить("ПолеHTMLПостроеноНаWebkit", Ложь);
	Данные.Вставить("ЭтоWindowsКлиент", Ложь);
	Данные.Вставить("ЭтоВебКлиент", Ложь);
	
	Возврат Данные;
КонецФункции

// Данные библиотек редакторов.
// 
// Параметры:
//  Форма -  ФормаКлиентскогоПриложения
// 
// Возвращаемое значение:
//  Структура
Функция ДанныеБиблиотекРедакторов(Форма) Экспорт
	Возврат Форма[ИмяРеквизитаРедактораКодаДанныеБиблиотекРедакторов()];
КонецФункции

// Новый библиотека редактора кода формы.
// 
// Возвращаемое значение:
//  Структура - Новый библиотека редактора кода формы:
// * ИмяМакета - Строка - 
// * ВидРедактора - Строка -
// * НеобходимоРаспаковатьНаКлиенте - Булево - 
// * БиблиотекаРаспакована - Булево - 
// * КаталогСохраненияБиблиотеки - Строка - 
// * ДанныеБиблиотеки - Строка - Адрес во временном хранилище. Содержимое см.НовыйДанныеБиблиотекиРедактора 
Функция НовыйБиблиотекаРедактораКодаФормы() Экспорт
	Данные = Новый Структура;
	Данные.Вставить("ИмяМакета", "");
	Данные.Вставить("ВидРедактора", "");
	Данные.Вставить("НеобходимоРаспаковатьНаКлиенте", Ложь);
	Данные.Вставить("БиблиотекаРаспакована", Ложь);
	Данные.Вставить("КаталогСохраненияБиблиотеки", "");
	Данные.Вставить("ДанныеБиблиотеки", "");
	
	Возврат Данные;
КонецФункции

// Новый данные библиотеки редактора.
// 
// Возвращаемое значение:
//  Структура -  Новый данные библиотеки редактора:
//  	* ИмяМакета - Строка
//  	* ДанныеФайлов - Соответствие из КлючИЗначение:
//  		** Ключ - Строка - Полное имя файла
//  		** Значение - Строка, ДвоичныеДанные, ТекстовыйДокумент - Адрес файла во временном хранилище
//  	* Стили - Массив из Строка
//  	* Скрипты - Массив из Строка
Функция НовыйДанныеБиблиотекиРедактора() Экспорт
	Данные = Новый Структура;
	Данные.Вставить("ИмяМакета", "");
	Данные.Вставить("ДанныеФайлов", Новый Соответствие);
	Данные.Вставить("Стили", Новый Массив);
	Данные.Вставить("Скрипты", Новый Массив);
	
	Возврат Данные;
КонецФункции

// Имя подключаемой обработки для исполнения кода редактора.
// 
// Параметры:
//  Идентификатор -Строка- Идентификатор
// 
// Возвращаемое значение:
//  Строка
Функция ИмяПодключаемойОбработкиДляИсполненияКодаРедактора(Идентификатор) Экспорт
	Возврат "УИ_РедакторКода_ОбработкаИсполнения_"+Идентификатор;
КонецФункции

// Префикс элементов редактора кода.
// 
// Возвращаемое значение:
//  Строка - Префикс элементов редактора кода
Функция ПрефиксЭлементовРедактораКода() Экспорт
	Возврат "РедакторКода1С";
КонецФункции

// Имя реквизита редактора кода.
// 
// Параметры:
//  ИдентификаторРедактора - Строка - Идентификатор редактора
// 
// Возвращаемое значение:
//  Строка - Имя реквизита редактора кода
Функция ИмяРеквизитаРедактораКода(ИдентификаторРедактора) Экспорт
	Возврат ПрефиксЭлементовРедактораКода()+"_"+ИдентификаторРедактора;
КонецФункции

// Имя реквизита редактора кода вид редактора.
// 
// Возвращаемое значение:
//  Строка - Имя реквизита редактора кода вид редактора
Функция ИмяРеквизитаРедактораКодаВидРедактора() Экспорт
	Возврат ПрефиксЭлементовРедактораКода()+"_ВидРедактора";
КонецФункции

// Имя реквизита редактора кода параметры формирования редакторов.
// 
// Возвращаемое значение:
//  Строка - Имя реквизита редактора кода параметры формирования редакторов
Функция ИмяРеквизитаРедактораКодаПараметрыФормированияРедакторов() Экспорт
	Возврат ПрефиксЭлементовРедактораКода()+"_ПараметрыФормированияРедакторов";
КонецФункции

// Имя реквизита редактора кода библиотеки редакторов.
// 
// Возвращаемое значение:
//  Строка -  Имя реквизита редактора кода библиотеки редакторов
Функция ИмяРеквизитаРедактораКодаДанныеБиблиотекРедакторов() Экспорт
	Возврат ПрефиксЭлементовРедактораКода()+"_ДанныеБиблиотекРедакторов";
КонецФункции

// Имя реквизита редактора кода список редакторов формы.
// 
// Возвращаемое значение:
//  Строка - Имя реквизита редактора кода список редакторов формы
Функция ИмяРеквизитаРедактораКодаСписокРедакторовФормы() Экспорт
	Возврат ПрефиксЭлементовРедактораКода()+"_СписокРедакторовФормы";
КонецФункции

// Имя реквизита редактора кода первичная инициализация прошла.
// 
// Возвращаемое значение:
// Строка 
Функция ИмяРеквизитаРедактораКодаПервичнаяИнициализацияПрошла() Экспорт
	Возврат ПрефиксЭлементовРедактораКода()+"_ПервичнаяИнициализацияПрошла";
КонецФункции

// Имя реквизита редактора кода редакторы формы.
// 
// Параметры:
//  ИдентификаторРедактора - Строка - Идентификатор редактора
// 
// Возвращаемое значение:
//  Строка - Имя реквизита редактора кода редакторы формы
Функция ИмяРеквизитаРедактораКодаРедакторыФормы(ИдентификаторРедактора) Экспорт
	Возврат ПрефиксЭлементовРедактораКода()+"_РедакторыФормы";
КонецФункции

// Имя кнопки командной панели.
// 
// Параметры:
//  ИмяКоманды - Строка - Имя команды
//  ИдентификаторРедактора - Строка - Идентификатор редактора
// 
// Возвращаемое значение:
//  Строка - Имя кнопки командной панели
Функция ИмяКнопкиКоманднойПанели(ИмяКоманды, ИдентификаторРедактора) Экспорт
	Возврат ПрефиксЭлементовРедактораКода() + "_" + ИмяКоманды + "_" + ИдентификаторРедактора;
КонецФункции

// Варианты редактора кода.
// 
// Возвращаемое значение:
//  Структура - Варианты редактора кода:
// * Текст - Строка - 
// * Ace - Строка - 
// * Monaco - Строка - 
Функция ВариантыРедактораКода() Экспорт
	Варианты = Новый Структура;
	Варианты.Вставить("Текст", "Текст");
	Варианты.Вставить("Ace", "Ace");
	Варианты.Вставить("Monaco", "Monaco");

	Возврат Варианты;
КонецФункции

// Вариант редактора по умолчанию.
// 
// Возвращаемое значение:
//  Строка - Вариант редактора по умолчанию
Функция ВариантРедактораПоУмолчанию() Экспорт
	Возврат ВариантыРедактораКода().Monaco;
КонецФункции

// Редактор кода использует поле HTML.
// 
// Параметры:
//  ВидРедактора -Строка- Вид редактора
// 
// Возвращаемое значение:
//  Булево -  Редактор кода использует поле HTML
Функция РедакторКодаИспользуетПолеHTML(ВидРедактора) Экспорт
	Варианты=ВариантыРедактораКода();
	Возврат ВидРедактора = Варианты.Ace
		Или ВидРедактора = Варианты.Monaco;
КонецФункции

// Первичная инициализация редакторов прошла.
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
// 
// Возвращаемое значение:
//  Булево
Функция ПервичнаяИнициализацияРедакторовПрошла(Форма) Экспорт
	Возврат Форма[ИмяРеквизитаРедактораКодаПервичнаяИнициализацияПрошла()];
КонецФункции 

// Установить признак первичная инициализация редакторов прошла.
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
//  ИнициализацияПрошла - Булево
Процедура УстановитьПризнакПервичнаяИнициализацияРедакторовПрошла(Форма, ИнициализацияПрошла) Экспорт
	Форма[ИмяРеквизитаРедактораКодаПервичнаяИнициализацияПрошла()] = ИнициализацияПрошла;
КонецПроцедуры

// Идентификатор редактора по элементу формы.
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
//  Элемент - ПолеФормы
// 
// Возвращаемое значение:
//  Строка- Идентификатор редактора по элементу формы
// Возвращаемое значение:
// 	Неопределено - не удалось обнаружить редактор для элемента
Функция ИдентификаторРедактораПоЭлементуФормы(Форма, Элемент) Экспорт
	РедакторыФормы = Форма[ИмяРеквизитаРедактораКодаСписокРедакторовФормы()];

	Для Каждого КлючЗначение Из РедакторыФормы Цикл
		Если КлючЗначение.Значение.ПолеРедактора = Элемент.Имя Тогда
			Возврат КлючЗначение.Ключ;
		КонецЕсли;
	КонецЦикла;

	Возврат Неопределено;
КонецФункции

// Структура имени команды формы.
// 
// Параметры:
//  ИмяКоманды - Строка -Имя команды
// 
// Возвращаемое значение:
//  Структура - Структура имени команды формы:
// * ИмяКоманды - Строка - 
// * ИдентификаторРедактора - Строка - 
Функция СтруктураИмениКомандыФормы(ИмяКоманды) Экспорт
	МассивИмени = СтрРазделить(ИмяКоманды, "_");

	СтруктураИмени = Новый Структура;
	СтруктураИмени.Вставить("ИмяКоманды", МассивИмени[1]);
	СтруктураИмени.Вставить("ИдентификаторРедактора", МассивИмени[2]);

	Возврат СтруктураИмени;
КонецФункции

// Вид редактора кода формы.
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
// 
// Возвращаемое значение:
//  Строка
Функция ВидРедактораКодаФормы(Форма) Экспорт
	Возврат Форма[ИмяРеквизитаРедактораКодаВидРедактора()];
КонецФункции

// Новый кэш текстов редактора.
// 
// Возвращаемое значение:
//  Структура - Новый кэш текстов редактора:
// * Текст - Строка -
// * ОригинальныйТекст - Строка -
Функция НовыйКэшТекстовРедактора() Экспорт
	Структура = Новый Структура;
	Структура.Вставить("Текст", "");
	Структура.Вставить("ОригинальныйТекст", "");
	
	Возврат Структура;
КонецФункции

#Область ИменаКомандКоманднойПанели


// Имя команды режим выполнения через обработку.
// 
// Возвращаемое значение:
//  Строка -  Имя команды режим выполнения через обработку
Функция ИмяКомандыРежимВыполненияЧерезОбработку() Экспорт
	Возврат "РежимВыполненияЧерезОбработку";
КонецФункции

// Имя команды конструктор запроса.
// 
// Возвращаемое значение:
//  Строка -  Имя команды конструктор запроса
Функция ИмяКомандыКонструкторЗапроса() Экспорт
	Возврат "КонструкторЗапроса";
КонецФункции

// Имя команды поделиться алгоритмом.
// 
// Возвращаемое значение:
//  Строка -  Имя команды поделиться алгоритмом
Функция ИмяКомандыПоделитьсяАлгоритмом() Экспорт
	Возврат "ПоделитьсяАлгоритмом";
КонецФункции

// Имя команды загрузить алгоритм.
// 
// Возвращаемое значение:
//  Строка -  Имя команды загрузить алгоритм
Функция ИмяКомандыЗагрузитьАлгоритм() Экспорт
	Возврат "ЗагрузитьАлгоритм";
КонецФункции

// Имя команды начать сессию взаимодействия.
// 
// Возвращаемое значение:
//  Строка -  Имя команды начать сессию взаимодействия
Функция ИмяКомандыНачатьСессиюВзаимодействия() Экспорт
	Возврат "НачатьСессиюВзаимодействия";
КонецФункции

// Имя команды закончить сессию взаимодействия.
// 
// Возвращаемое значение:
//  Строка -  Имя команды закончить сессию взаимодействия
Функция ИмяКомандыЗакончитьСессиюВзаимодействия() Экспорт
	Возврат "ЗакончитьСессиюВзаимодействия";
КонецФункции


#КонецОбласти

// Имя библиотеки взаимодействия для данных формы.
// 
// Параметры:
//  ВидРедактора - Строка- Вид редактора
// 
// Возвращаемое значение:
//  Строка - Имя библиотеки взаимодействия для данных формы
Функция ИмяБиблиотекиВзаимодействияДляДанныхФормы(ВидРедактора) Экспорт
	Возврат "БиблиотекаВзаимодействия"+ВидРедактора;
КонецФункции

// Редакторы формы.
// 
// Параметры:
//  Форма - ФормаКлиентскогоПриложения-Форма
// 
// Возвращаемое значение:
//  Структура из КлючИЗначение:
//  	* Ключ - Строка - Идентификатор редактора
//  	* Значение - см. НовыйДанныеРедактораФормы
Функция РедакторыФормы(Форма) Экспорт
	Возврат Форма[ИмяРеквизитаРедактораКодаСписокРедакторовФормы()];
КонецФункции

// Новый данные редактора формы.
// 
// Возвращаемое значение:
//  Структура - Новый данные редактора формы:
// * СобытияРедактора - см. НовыйПараметрыСобытийРедактора
// * Инициализирован - Булево -
// * ГотовКИспользованию - Булево -
// * Видимость - Булево -
// * ТолькоПросмотр - Булево -
// * КэшТекстаРедактора - см. УИ_РедакторКодаКлиентСервер.НовыйКэшТекстовРедактора
// * Язык - Строка -
// * ПолеРедактора - Строка -
// * ИмяРеквизита - Строка -
// * ИмяКоманднойПанелиРедактора - Строка -
// * Идентификатор - Строка -
// * ИспользоватьОбработкуДляВыполненияКода - Булево -
// * ПараметрыРедактора - см. ПараметрыРедактораКодаПоУмолчанию
// * КэшРезультатовПодключенияОбработкиИсполнения -  см. НовыйКэшРезультатовИсполненияЧерезОбработку 
// * ПараметрыСессииВзаимодействия - см. НовыйПараметрыСессииВзаимодействия
// * БылаВыполненаИнициализацияРанее - Булево
Функция НовыйДанныеРедактораФормы() Экспорт
	ДанныеРедактора = Новый Структура;
	ДанныеРедактора.Вставить("Идентификатор", "");
	ДанныеРедактора.Вставить("СобытияРедактора", Неопределено);
	ДанныеРедактора.Вставить("ГотовКИспользованию", Ложь);
	ДанныеРедактора.Вставить("Инициализирован", Ложь);
	ДанныеРедактора.Вставить("Видимость", Истина);
	ДанныеРедактора.Вставить("ТолькоПросмотр", Ложь);
	ДанныеРедактора.Вставить("КэшТекстаРедактора", Неопределено);
	ДанныеРедактора.Вставить("Язык", "bsl");
	ДанныеРедактора.Вставить("ПолеРедактора", "");
	ДанныеРедактора.Вставить("ИмяКоманднойПанелиРедактора", "");
	ДанныеРедактора.Вставить("ИмяРеквизита", "");
	ДанныеРедактора.Вставить("ИспользоватьОбработкуДляВыполненияКода", Ложь);
	ДанныеРедактора.Вставить("ПараметрыРедактора", Неопределено);
	ДанныеРедактора.Вставить("КэшРезультатовПодключенияОбработкиИсполнения", Неопределено);
	ДанныеРедактора.Вставить("ПараметрыСессииВзаимодействия", Неопределено);
	ДанныеРедактора.Вставить("БылаВыполненаИнициализацияРанее", Ложь);
	
	Возврат ДанныеРедактора;
КонецФункции

// Новый параметры событий редактора.
// 
// Возвращаемое значение:
//  Структура - Новый параметры событий редактора:
// * ПриИзменении - Строка -
Функция НовыйПараметрыСобытийРедактора() Экспорт
	СобытияРедактора = Новый Структура;
	СобытияРедактора.Вставить("ПриИзменении", "");
	
	Возврат СобытияРедактора;
КонецФункции
 
// Новый данные редактора для сборки обработки.
// 
// Возвращаемое значение:
//  Структура - Новый данные редактора для сборки обработки:
// * Идентификатор - Строка -
// * ИменаПредустановленныхПеременных - Массив из Строка -
// * ТекстРедактора - Строка -
// * ТекстРедактораДляОбработки - Строка -
// * ИсполнениеНаКлиенте - Булево -
// * ИмяПодключаемойОбработки - Строка -
Функция НовыйДанныеРедактораДляСборкиОбработки() Экспорт
	Данные = Новый Структура;
	Данные.Вставить("Идентификатор", "");
	Данные.Вставить("ИменаПредустановленныхПеременных", Новый Массив);
	Данные.Вставить("ТекстРедактора", "");
	Данные.Вставить("ТекстРедактораДляОбработки", "");
	Данные.Вставить("ИсполнениеНаКлиенте", Ложь);
	Данные.Вставить("ИмяПодключаемойОбработки", "");
		
	Возврат Данные;
КонецФункции

// Новый кэш результатов исполнения через обработку.
// 
// Возвращаемое значение:
//  Структура - Новый кэш результатов исполнения через обработку:
// * ИсполнениеНаКлиенте - Булево -
// * ТекстРедактора - Строка -
// * ИменаПредустановленныхПеременных - Массив Из Строка-
Функция НовыйКэшРезультатовПодключенияОбработкиИсполнения() Экспорт
	Кэш = Новый Структура;
	Кэш.Вставить("ИсполнениеНаКлиенте", Ложь);
	Кэш.Вставить("ТекстРедактора", "");
	Кэш.Вставить("ИменаПредустановленныхПеременных", Новый Массив);
	
	Возврат Кэш;
КонецФункции

// Новый параметры сессии взаимодействия.
// 
// Возвращаемое значение:
//  Структура -  Новый параметры сессии взаимодействия:
// * ИмяПользователя - Строка - 
// * Идентификатор - Строка - 
// * URLВзаимодействия - Строка - 
Функция НовыйПараметрыСессииВзаимодействия() Экспорт
	ПараметрыСессииВзаимодействия = Новый Структура;
	ПараметрыСессииВзаимодействия.Вставить("ИмяПользователя", "");
	ПараметрыСессииВзаимодействия.Вставить("Идентификатор","");
	ПараметрыСессииВзаимодействия.Вставить("URLВзаимодействия","");
	
	Возврат ПараметрыСессииВзаимодействия;
КонецФункции

#Область УстаревшиеПроцедурыИФункции

//@skip-check bsl-variable-name-invalid
// Устарела. Следует использовать РезультатВыполненияАлгоритма
// Выполнить алгоритм.
// 
// Параметры:
//  __ТекстАлготима__ - Строка - Текст алготима
//  __Контекст__ - Структура -Контекст
//  ИсполнениеНаКлиенте - Булево - Исполнение на клиенте
//  Форма - Неопределено - Форма
//  ИдентификаторРедактора - Неопределено - Идентификатор редактора
// 
// Возвращаемое значение:
// см. НовыйРезультатВыполненияАлгоритма
Функция ВыполнитьАлгоритм(__ТекстАлготима__, __Контекст__, ИсполнениеНаКлиенте = Ложь, Форма = Неопределено,
	ИдентификаторРедактора = Неопределено) Экспорт

	ПараметрыВыполненияАлгоритма = НовыйПараметрыВыполненияАлгоритма();
	ПараметрыВыполненияАлгоритма.Текст = __ТекстАлготима__;
	ПараметрыВыполненияАлгоритма.Форма = Форма;
	ПараметрыВыполненияАлгоритма.ВходящиеПеременные = __Контекст__;
	ПараметрыВыполненияАлгоритма.ИсполнениеНаКлиенте = ИсполнениеНаКлиенте;
	ПараметрыВыполненияАлгоритма.ИдентификаторРедактора = ИдентификаторРедактора;

	Возврат РезультатВыполненияАлгоритма(ПараметрыВыполненияАлгоритма);

КонецФункции



#КонецОбласти

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

Функция ВариантыЯзыкаСинтаксисаРедактораMonaco() Экспорт
	ЯзыкиСинтаксиса = Новый Структура;
	ЯзыкиСинтаксиса.Вставить("Авто", "Авто");
	ЯзыкиСинтаксиса.Вставить("Русский", "Русский");
	ЯзыкиСинтаксиса.Вставить("Английский", "Английский");
	
	Возврат ЯзыкиСинтаксиса;
КонецФункции

Функция ВариантыТемыРедактораMonaco() Экспорт
	Варианты = Новый Структура;
	
	Варианты.Вставить("Светлая", "Светлая");
	Варианты.Вставить("Темная", "Темная");
	
	Возврат Варианты;
КонецФункции

Функция ТемаРедактораMonacoПоУмолчанию() Экспорт
	ТемыРедактора = ВариантыТемыРедактораMonaco();
	
	Возврат ТемыРедактора.Светлая;
КонецФункции
Функция ЯзыкСинтаксисаРедактораMonacoПоУмолчанию() Экспорт
	Варианты = ВариантыЯзыкаСинтаксисаРедактораMonaco();
	
	Возврат Варианты.Авто;
КонецФункции

// Параметры редактора monaco по умолчанию.
// 
// Возвращаемое значение:
//  Структура -  Параметры редактора monaco по умолчанию:
// * ВысотаСтрок - Число - 
// * Тема - Строка - 
// * ЯзыкСинтаксиса - Строка - 
// * ИспользоватьКартуКода - Булево - 
// * СкрытьНомераСтрок - Булево - 
// * ОтображатьПробелыИТабуляции - Булево - 
// * КаталогиИсходныхФайлов - Массив Из Строка - 
// * ФайлыШаблоновКода - Массив из Строка- 
// * ИспользоватьСтандартныеШаблоныКода - Булево - 
// * ИспользоватьКомандыРаботыСБуферомВКонтекстномМеню - Булево - 
Функция ПараметрыРедактораMonacoПоУмолчанию() Экспорт
	ПараметрыРедактора = Новый Структура;
	ПараметрыРедактора.Вставить("ВысотаСтрок", 0);
	ПараметрыРедактора.Вставить("Тема", ТемаРедактораMonacoПоУмолчанию());
	ПараметрыРедактора.Вставить("ЯзыкСинтаксиса", ЯзыкСинтаксисаРедактораMonacoПоУмолчанию());
	ПараметрыРедактора.Вставить("ИспользоватьКартуКода", Ложь);
	ПараметрыРедактора.Вставить("СкрытьНомераСтрок", Ложь);
	ПараметрыРедактора.Вставить("ОтображатьПробелыИТабуляции", Ложь);
	ПараметрыРедактора.Вставить("КаталогиИсходныхФайлов", Новый Массив);
	ПараметрыРедактора.Вставить("ФайлыШаблоновКода", Новый Массив);
	ПараметрыРедактора.Вставить("ИспользоватьСтандартныеШаблоныКода", Истина);
	ПараметрыРедактора.Вставить("ИспользоватьКомандыРаботыСБуферомВКонтекстномМеню", Ложь);
	
	Возврат ПараметрыРедактора;
КонецФункции

Функция ПараметрыРедактораКодаПоУмолчанию() Экспорт
	ПараметрыРедактора = Новый Структура;
	ПараметрыРедактора.Вставить("Вариант",  ВариантРедактораПоУмолчанию());
	ПараметрыРедактора.Вставить("РазмерШрифта", 0);
	ПараметрыРедактора.Вставить("Monaco", ПараметрыРедактораMonacoПоУмолчанию());
	
	Возврат ПараметрыРедактора;
КонецФункции

Функция НовыйОписаниеКаталогаИсходныхФайловКонфигурации() Экспорт
	Описание = Новый Структура;
	Описание.Вставить("Каталог", "");
	Описание.Вставить("Источник", "");
	
	Возврат Описание;
КонецФункции

// Текст HTMLРедактора кода ace.
// 
// Параметры:
//  БиблиотекаРедактора - см. УИ_РедакторКодаКлиентСервер.НовыйБиблиотекаРедактораКодаФормы
//  Язык - Строка - Язык
// 
// Возвращаемое значение:
//  Строка - Текст HTMLРедактора кода ace
Функция ТекстHTMLРедактораКодаAce(БиблиотекаРедактора, Язык) Экспорт

	ДопСкрипты = Новый Массив;
	Если Язык = "css" Или Язык = "javascript" Или Язык = "html" Тогда
		ДопСкрипты.Добавить("htmljs.js");
	ИначеЕсли Язык = "bsl" Или Язык = "bsl_query" Тогда
	ИначеЕсли Язык = "json" Тогда
		ДопСкрипты.Добавить("json.js");
		ДопСкрипты.Добавить("xml.js");
		ДопСкрипты.Добавить("yaml.js");
	Иначе
		ДопСкрипты.Добавить("" + Язык + ".js");
	КонецЕсли;
	ТекстСтилей="";
	ТекстСкриптов = "";
	Если БиблиотекаРедактора.НеобходимоРаспаковатьНаКлиенте Тогда
		ТекстСтилей = "
					  |<link href=""app.css"" rel=""stylesheet"">";

		ТекстСкриптов= ТекстСкриптов +"
					   |<script src=""app.js""></script>";
		Для Каждого ДопСкрипт Из ДопСкрипты Цикл
			ТекстСкриптов=ТекстСкриптов + " 
										  |<script src=""" + ДопСкрипт + """ ></script>";
		КонецЦикла;
	Иначе
		ДанныеБиблиотеки = ПолучитьИзВременногоХранилища(БиблиотекаРедактора.ДанныеБиблиотеки);//см. УИ_РедакторКодаКлиентСервер.НовыйДанныеБиблиотекиРедактора
		Для Каждого ТекСтиль Из ДанныеБиблиотеки.Стили Цикл
			ТекстСтилей = ТекстСтилей + "
										|<style>
										|" + ТекСтиль + "
														|</style>";
		КонецЦикла;

		ТекстСкриптов= ТекстСкриптов
					   + "
						 |<script src="""
					   + ДанныеБиблиотеки.ДанныеФайлов["app.js"]
					   + """></script>";
		Для Каждого ДопСкрипт Из ДопСкрипты Цикл
			ТекстСкриптов=ТекстСкриптов
						  + " 
							|<script src="""
						  + ДанныеБиблиотеки.ДанныеФайлов[ДопСкрипт] + """ ></script>";
		КонецЦикла;

	КонецЕсли;

	ТекстHTML= "<!DOCTYPE html>
			   |<html lang=""ru"">
			   |<head>
			   |<meta charset=""UTF-8"" />
			   |<meta name=""viewport"" content=""width=device-width,initial-scale=1"" />
			   |<meta http-equiv=""X-UA-Compatible"" content=""ie=edge"" />
			   |<title>Ace editor for 1C</title>
			   |" + ТекстСтилей + "
								  |</head>
								  |<body>
								  |<div id=""editor""></div>
								  |<div id=""statusBar""></div>
								  |" + ТекстСкриптов + "
													   |</body>
													   |</html>";

	Возврат ТекстHTML;
КонецФункции


#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// Дополненный контекстом код алгоритма.
// 
// Параметры:
//  ТекстАлготима - Строка - Текст алготима
//  Контекст - Структура - Контекст
//  ИсходящиеПеременные - Массив из Строка
// 
// Возвращаемое значение:
//  Строка - Дополненный контекстом код алгоритма
Функция ДополненныйКонтекстомКодАлгоритма(ТекстАлготима, Контекст, ИсходящиеПеременные)
	ПодготовленныйКод="";

	Для Каждого КлючЗначение Из Контекст Цикл
		ПодготовленныйКод = ПодготовленныйКод +"
		|"+КлючЗначение.Ключ+"=___УИ___ПараметрыВыполненияАлгоритма____.ВходящиеПеременные."+КлючЗначение.Ключ+";";
	КонецЦикла;

	ПодготовленныйКод=ПодготовленныйКод + Символы.ПС + ТекстАлготима;

	Для Каждого ИмяПеременной Из ИсходящиеПеременные Цикл
		ПодготовленныйКод = ПодготовленныйКод
							+ "
							  |___УИ__РезультатВыполненияАлгоритма___.ЗначенияПеременных.Вставить("""
							+ ИмяПеременной
							+ """, "
							+ ИмяПеременной
							+ ");";
	КонецЦикла;
	Возврат ПодготовленныйКод;
КонецФункции



#КонецОбласти